package com.wjw.java.oop.extends_.demo;

import com.wjw.java.oop.extends_.demo.Graduate;
import com.wjw.java.oop.extends_.demo.Pupil;

/**
 * ----------------------------------------------------------------------
 * 测试继承：
 * 父类Student
 * 子类Pupil、Graduate
 * ----------------------------------------------------------------------
 * 继承细节：
 * 1.子类继承了父类所有的属性和方法,但是父类私有的属性和方法不能在子类中直接使用,要通过父类提供公共的方法去访问
 * 2.创建子类对象时,会先调用父类的构造器,然后再调用自己的构造器
 * 3.创建子类对象时,不管使用子类的哪个构造器,默认情况下都会去调用父类的无参构造super();
 *   如果父类没有提供无参构造器,必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化,否则编译不会通过
 * 4.如果希望指定调用父类的某个构造器,需显示的调用一下
 * 5.super在使用时,需要放在构造器的第一行
 * 6.super()和this都只能放在构造器的第一行,但不能同时使用
 * 7.Java中所有的类都是Object类的子类
 * 8.父类构造器的调用不限于直接父类,将一直往上追溯到Object类(顶级父类)
 * 9.子类只能继承一个父类
 * 10.不能滥用继承,子类必须是is a的关系
 *    Graduate is a Student
 *    Pupil is a Student
 * ----------------------------------------------------------------------
 */
public class ExtendsTest {

    public static void main(String[] args) {
        Pupil p = new Pupil();
        p.setName("小学生");
        p.setAge(10);
        p.setScore(80);
        p.showInfo();
        p.setAihao("玩奥特曼！！！");
        p.myAihao();
        System.out.println("=========================");
        Graduate g = new Graduate();
        g.setName("大学生");
        g.setAge(20);
        g.setScore(100);
        g.showInfo();
        g.setHobby("玩英雄联盟！！！");
        g.myHobby();
    }
}
